Session fixation
✒️ 2025-05-16 09:08 내용 수정
공격자가 session ID나 session 토큰을 고정한 뒤, 이를 통해 인증된 사용자의 권한을 획득하는 공격 기법
- 참고 자료 : Wikipedia Session fixation, OWASP Session fixation
- Session identifier(세션 식별자) : Session ID나 Session 토큰은 세션을 식별하기 위해 사용된다.
- 참고 자료 : Wikipedia Session ID
- 대부분의 Session fixation 공격은 웹 기반으로 URL의 query string이나
POST데이터로부터 들어오는 Session identifier에 의존한다. - Session fixation은 피해자의 브라우저에 생성된 세션을 고정하는 것으로 피해자가 로그인 하기 전에 공격이 시작된다.
- 피해자가 로그인 한 후 클라이언트와 웹 서버 간의 생성된 세션을 가로채는 Session Hijacking과는 다르다.
공격 방법
- 공격 작동 방식은 다음과 같다.
- 공격자가 미리 세션을 시작하여 서버로부터
SID=TARGET_SID라는 Session ID를 받는다. - 피해자에게
http://example.com/?SID=TARGET_SID와 같은 URL을 이메일 등으로 전송한다. - 피해자가 URL을 통해 사이트에 접속하고 인증을 진행하면
SID=TARGET_SID인 세션ID는 인증된 상태로 공격자가 이를 통해 피해자의 인증된 Session에 접근할 수 있게 된다.
- 공격자가 미리 세션을 시작하여 서버로부터
- 공격에 사용되는 Session ID나 토큰은 URL 매개변수에 넣거나, HTTL 포맷 이메일 등에 숨겨진 필드에 넣거나, 쿠키에 넣어 전송한다.
공격 방지법
- Session identifier(ID, token)를
GET/POST변수로 받지 않는다.- 사용자의 복사 붙여넣기와 같은 동작에 SID가 유출될 수 있고, SID가 브라우저 history나 웹 서버 로그 등에 저장되기 때문에 URL 변수로 받지 않는 것이 중요하다.
- 매 요청마다 새로운 Session ID를 생성한다.
- 로그인 시 새로운 session ID를 생성하는 방법으로 방지할 수 있다.
- 이는 공격자가 세션을 고정하더라도 해당 Session ID가 만료되어 사용할 수 없도록 만든다.
- 서버에서만 생성된 SID만 받도록 설정하는 것도 방법이나, 모든 session fixation을 막을 수 없기 때문에 주의해야 한다.
- 공격자가 미리 타겟 사이트에 접속하여 서버로부터 온 SID를 받아 피해자에게 URL 등으로 전송할 수 있기 때문이다.
- Session Timeout을 설정한다.
- Session 만료 시간을 설정하여 세션이 오랫동안 유지되지 않는 경우 Session을 삭제하는 것으로 공격자가 Session ID를 다시 사용하기 어렵게 만든다.